Python渗透 
text::Python  
 
 
一、渗透流程  
二、Python基础补充 1 命令行操作 1.1 sys 
sys.argv:[0]是本身,[1]是第一个参数,等等。列表存储。
 
1.2 getopt 
自定义带参输入。
 
opts,args = getopt.getopt( sys.argv[1 :] , "u:p:"  , ["file=" ]) 
 
1.3 optparse 
自动生成帮助文档。
帮助 
 
parser = optparse.OptionParser(usage) parser.add_option('-u' ,'--user' ,dest='User' ,type ='string' ,help ='target user' ,default='root' ) options,args = parser.parse_args() import  optparseusage = "python %prog -u/--user  -p/--password "   parser = optparse.OptionParser(usage) parser.add_option('-u' ,'--user' ,dest='User' ,type ='string' ,help ='target user' ,default='root' ) parser.add_option('-p' ,'--password' ,dest='Pad' ,type ='string' ,help ='target password' ) options,args = parser.parse_args() print ("options:" ,options)print ("user:" ,options.User)print ("password:" ,options.Pad)print ("args" ,args)
 
1.4 argparse 
同理 optparse 但比 optparse 更简单快捷。
帮助 
 
import  argparseparser = argparse.ArgumentParser() parser.add_argument('-u' ,'--user' ,dest='User' ,type =str ,default='root' ,help ='target User' ) parser.add_argument('-s' ,'--sex' ,dest='Sex' ,type =str ,choices={'男' ,'女' },default='男' ,help ='target Sex' ) parser.add_argument('-n' ,'--number' ,dest='Num' ,nargs=2 ,required=True ,type =int ,help ='Target Two Numbers' ) arg = parser.parse_args() 
 
2 网络编程 
socket与socketserver 
 
2.1 IP地址查询 
GeoLiteCity.Dat 
ip查询:【1】  【2】  【3】  【4】 
 
import  pygeoipgeo = pygeoip.GeoIP( 'GeoLiteCity\GeoLiteCity.dat'  ) geo.record_by_name( 'ip'  ) 
 
2.2 基础函数 from  socket import  *s = socket( AF_INET , SOCK , IPPROTO ) s.bind(tup) s.connect(tup) s.listen(backlog) conn , addr = s.accept()     s.send(buf, [,flags]) s.recv(buflen, [,flags]) s.sendto(str , addr) data,addr = s.recvfrom(buflen, [,flags]) s.sendall(buf) buf.encode() / decode()  
 
2.3 其他函数 import  uuiddef  get_Mac_Address ():    mac = uuid.UUID(int  = uuid.getnode()).hex [-12 :]     return  ":" .join([mac[e:e+2 ] for  e in  range (0 ,11 ,2 )]) ip = gethostbyname(gethostname()) gethostbyaddr(ip) getservbyport(3389 ,"tcp" ) getservbyname("http" ) 
 
2.4 文件传输实例 
my::案例 
结构体 
 
服务器
提示界面(cmd)——创建线程类(类中实现发送文件,不需要再 listen 等操作)——发送数据
 
socketserver.ThreadingTCPServer(addr,MyServer) class  MyServer (socketserver.BaseRequestHandler):      def  handle (self ):          self.request          self.request.close()           struct.pack('i' ,int ).encode('utf-8' ) json.dumps(dir ) 
 
客户端
提示界面(cmd)——connect——接收数据
 
struct.unpack('i' ,int ) json.loads(info.decode('utf-8' )) 
 
2.5 可执行文件转化 
pyinstaller打包只可再编译同一操作系统下运行。(不同易报错)
 
3 setting  
三、Pocsuite3 1 安装 
Pocsuite3安装:
pip install pocsuite 
git clone https://github.com/knownsec/pocsuite3.git 
wget https://github.com/knownsec/pocsuite3/archive/master.zip 
 
必要库安装(在pocsuite3库下使用):
cd /usr/lib/python3/dist-packages/pocsuite3 
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
 
使用:
在pocsuite3路径下,python3 cli.py <-para> 
 
 
2 cli.py使用 
Shodan的Key验证:https://api.shodan.io/account/profile?key=xxx 
Fofa的key验证:https://fofa.info/api/v1/info/my?email=xxx&key=xxx 
 
命令 
作用 
 
 
-u URL [URL…] , —url URL [URL…] 
直接指定URL,可以指定多个 
 
-f URL_FILE , —file URL_FILE 
加载指定文件中的目标 
 
-r POC [POC…] 
加载POC脚本 
 
-c CONFIGFILE Load options from a configuration INI file 
调用配置文件。通过配置文件中的配置信息对目标进行POC验证 
 
—verify 
验证目标 
 
—attack 
攻击目标 
 
—shell 
交互模式 
 
—command [command] 
执行命令 
 
 
 
python3 cli.py -r pocs/poc-flask.py -u http://ip -- verify      python3 cli.py -r pocs/all -flask.py -f /root/url.txt --attack --command id  python3 cli.py -r pocs/all -flask.py -f /root/url.txt --shell python3 cli.py -c ../pocsuite.ini python3 cli.py -r pocs/redis_unauthorized_access.py --dork "product:redis"  python3 cli.py -r pocs/redis_unauthorized_access.py --dork-shodan "product:redis"  --shodan-token "xxx"  python3 cli.py -r pocs/redis_unauthorized_access.py --dork-fofa "service:redis"  --fofa-user "xxx"  --fofa-token "xxx"  
 
3 console.py使用 python3 console.py help list use [path] use pocs/poc-flask show options set  [Name] [value]set  target http://ip     run exploit 
 
4 Flask模板注入漏洞 
Jinja2 
 
from  flask import  Flask, requestfrom  jinja2 import  Templateapp = Flask(__name__) @app.route("/"  ) def  index ():    name = request.args.get('name' , 'guest' )     t = Template("Hello"  + name)     return  t.render() if  __name__ == "__main__" :    app.run()      http://127.0 .0 .1 :5000 ?name={{2 *2 }}